package com.ruoyi.order.service;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.common.core.domain.model.LoginAppUser;
import com.ruoyi.order.domain.OrderInfo;
import com.ruoyi.order.domain.dto.OrderInfoAppPageDTO;
import com.ruoyi.order.domain.dto.OrderInfoDTO;
import com.ruoyi.order.domain.dto.OrderInfoPageDTO;
import com.ruoyi.order.domain.vo.*;
import com.ruoyi.order.enums.OrderStatusEnum;
import com.ruoyi.server.domain.vo.ServerTaskPeopleCountVO;

import java.util.List;
import java.util.Map;


/**
 * 订单Service接口
 *
 * @author ghostmen
 * @date 2024-11-03
 */
public interface IOrderInfoService {
    /**
     * 查询订单
     *
     * @param orderId 订单主键
     * @return 订单
     */
    public OrderInfoDetailsVO selectOrderInfoByOrderId(Long orderId);

    /**
     * 查询订单
     *
     * @param orderId 订单主键
     * @return 订单
     */
    public OrderInfoAppDetailsVO getInfoByOrderId(Long orderId);

    /**
     * 查询订单
     *
     * @param orderNum 订单编号
     * @return 订单
     */
    public OrderInfoAppDetailsVO getInfoByOrderNum(String orderNum);

    /**
     * 查询订单列表
     *
     * @param pageDTO 订单
     * @return 订单集合
     */
    public PageInfo<OrderInfoVO> selectOrderInfoList(OrderInfoPageDTO pageDTO);

    /**
     * 查询订单列表
     *
     * @param pageDTO 订单
     * @return 订单集合
     */
    public PageInfo<OrderInfoAppVO> getOrderList(OrderInfoAppPageDTO pageDTO);

    /**
     * 下单
     *
     * @param orderInfoDTO 订单
     * @return 结果
     */
    public String buyOrder(OrderInfoDTO orderInfoDTO, LoginAppUser loginAppUser);

    /**
     * 支付订单
     *
     * @param orderNum
     * @param appUser
     * @return
     */
    Map<String, String> payOrder(String orderNum, String ip, AppUser appUser);

    /**
     * 取消订单
     *
     * @param loginAppUser
     * @param orderId
     * @return
     */
    int cancelOrder(LoginAppUser loginAppUser, String orderId);

    /**
     * 批量删除订单
     *
     * @param orderIds 需要删除的订单主键集合
     * @return 结果
     */
    public int deleteOrderInfoByOrderIds(Long[] orderIds);

    /**
     * 用户删除订单
     *
     * @param orderIds
     * @return
     */
    int userRemoveByIds(LoginAppUser loginAppUser, Long[] orderIds);

    /**
     * 删除订单信息
     *
     * @param orderId 订单主键
     * @return 结果
     */
    public int deleteOrderInfoByOrderId(Long orderId);

    /**
     * 获取对应区服任务报名人数
     *
     * @param taskIds 区服任务id
     * @return 结果
     */
    List<ServerTaskPeopleCountVO> getApplyPeopleCountByTaskIds(List<Long> taskIds);


    /**
     * 获取对应区服任务报名人数
     *
     * @param taskId 区服任务id
     * @return 结果
     */
    ServerTaskPeopleCountVO getApplyPeopleCountByTaskId(Long taskId);

    /**
     * 开始订单，完成订单
     *
     * @param taskId
     */
    void updateOrderByTaskId(Long taskId, OrderStatusEnum orderStatusEnum);

    /**
     * 订单取消定时任务
     */
    void cancelOrderTask();

    /**
     * 微信回调接口
     *
     * @param resultMap
     * @return
     */
    String parseOrderNotifyResult(Map<String, String> resultMap);

    /**
     * @throws
     * @MethodName getOrderInfoListByTaskIdsAndUserId
     * @author zhouzihao
     * @param: taskIds
     * @param: userId
     * @DateTime 2024年11月7日, 0007 上午 10:10
     * @return: java.util.List<com.ruoyi.order.domain.OrderInfo>
     * @description:获取当前用户订单信息
     */
    List<OrderInfo> getOrderInfoListByTaskIdsAndUserId(List<Long> taskIds, Long userId);

    /**
     * 手动支付
     *
     * @param payDTO
     * @return
     */
    int manualPay(OrderManualPayDTO payDTO);

    /**
     * 根据区服任务查询订单
     *
     * @param taskId
     * @return
     */
    List<OrderInfo> selectOrderInfoListByTaskId(Long taskId);
}
